package org.karelun.gef;

import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.PlatformUI;

/**
 * This class controls all aspects of the application's execution
 */
public class Application implements IApplication {
	
//	private class SignInDialog extends Dialog{
//		
//		private Text inputText;
//		
//		protected SignInDialog(Shell parentShell) {
//			super(parentShell);
//		}
//		
//		protected Control createDialogArea(Composite parent) {
//			Composite composite=(Composite)super.createDialogArea(parent);
//			composite.setLayout(new GridLayout());
//			composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));
//			inputText=new Text(composite,SWT.BORDER);
//			inputText.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));
//			return composite; 
//		}
//	}
	
	/* (non-Javadoc)
	 * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
	 */
	public Object start(IApplicationContext context) throws Exception {
		Display display = PlatformUI.createDisplay();
		try {
//			Shell shell = new Shell(display);
//			try{
//				if(!signIn(shell)){
//					Platform.endSplash();
//					return IApplication.EXIT_OK;
//				}
//			}finally{
//				if(shell!=null)
//					shell.dispose();
//			}
			
			int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
			if (returnCode == PlatformUI.RETURN_RESTART)
				return IApplication.EXIT_RESTART;
			else
				return IApplication.EXIT_OK;
		} finally {
			display.dispose();
		}
		
	}

//	private boolean signIn(Shell shell) {
//		Rectangle bounds = Display.getCurrent().getPrimaryMonitor().getBounds();
//		shell.setLocation(300, 200);
//		shell.setText("SignIn");
//		SignInDialog d = new SignInDialog(shell);
//		int ret = d.open();
//		if(ret==IDialogConstants.OK_ID)
//			return true;
//		return false;
//	}

	/* (non-Javadoc)
	 * @see org.eclipse.equinox.app.IApplication#stop()
	 */
	public void stop() {
		final IWorkbench workbench = PlatformUI.getWorkbench();
		if (workbench == null)
			return;
		final Display display = workbench.getDisplay();
		display.syncExec(new Runnable() {
			public void run() {
				if (!display.isDisposed())
					workbench.close();
			}
		});
	}
}
